package com.atguigu.tingshu.album.service;

import com.atguigu.tingshu.album.mapper.AlbumInfoMapper;
import com.atguigu.tingshu.album.mapper.AlbumStatMapper;
import com.atguigu.tingshu.common.constant.SystemConstant;
import com.atguigu.tingshu.model.album.AlbumStat;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class InitAlbumSta {
    @Autowired
    private AlbumStatMapper albumStatMapper;
    @Autowired
    private AlbumInfoMapper albumInfoMapper;

    // 初始化专辑的统计信息 比如订阅量、播放量、评论量、购买量
    @Test
    public void test4() {
        // 获取所有的专辑id
        List<Long> albumIdList = albumInfoMapper.selectList(null).stream().map(
                albumInfo -> albumInfo.getId()
        ).toList();
        albumIdList.forEach(albumId -> {
            System.out.println(albumId);
        });

    albumIdList.forEach(albumId -> {
        insertOrUpdateAlbumStat(albumId, SystemConstant.ALBUM_STAT_BROWSE);// 购买
        insertOrUpdateAlbumStat(albumId, SystemConstant.ALBUM_STAT_COMMENT);// 评论数
        insertOrUpdateAlbumStat(albumId, SystemConstant.ALBUM_STAT_PLAY);// 播放量
        insertOrUpdateAlbumStat(albumId, SystemConstant.ALBUM_STAT_SUBSCRIBE);// 订阅量
    });
    }
    private void insertOrUpdateAlbumStat(Long albumId, String statType) {
        // 独立生成各类型的随机值（避免层级依赖）
        int statNum;
        switch (statType) {
            case SystemConstant.ALBUM_STAT_BROWSE:
                statNum = (int) (Math.random() * 2000);       // 浏览量 0-2000
                break;
            case SystemConstant.ALBUM_STAT_COMMENT:
                statNum = (int) (Math.random() * 200);        // 评论量 0-200
                break;
            case SystemConstant.ALBUM_STAT_SUBSCRIBE:
                statNum = (int) (Math.random() * 20) + 10;    // 订阅量 10-30
                break;
            case SystemConstant.ALBUM_STAT_PLAY:
                statNum = (int) (Math.random() * 500) + 500;  // 播放量 500-1000
                break;
            default:
                throw new IllegalArgumentException("未知的统计类型: " + statType);
        }

        // 统一更新逻辑
        AlbumStat albumStat = new AlbumStat();
        albumStat.setAlbumId(albumId);
        albumStat.setStatType(statType);
        albumStat.setStatNum(statNum);

        // 使用albumId + statType作为更新条件
        albumStatMapper.update(albumStat,
                new LambdaUpdateWrapper<AlbumStat>()
                        .eq(AlbumStat::getAlbumId, albumId)
                        .eq(AlbumStat::getStatType, statType));
    }
}
